﻿using System;
using System.Collections.Generic;
using System.Configuration;

namespace MasoQna.Infrastructure.Auth
{
    public class NateConsumer : AbstractConsumer
    {
        public NateConsumer()
        {
            ConsumerKey = ConfigurationManager.AppSettings["nateConsumerKey"];
            ConsumerSecret = ConfigurationManager.AppSettings["nateConsumerSecret"];
            RequestTokenEndPoint = "https://oauth.nate.com/OAuth/GetRequestToken/V1a";
            UserAuthorizationEndPoint = "https://oauth.nate.com/OAuth/Authorize/V1a";
            AccessTokenEndPoint = "https://oauth.nate.com/OAuth/GetAccessToken/V1a";
            imagePath = "/Content/image/nate.png";
        }
        
        public override string GetUserId(IDictionary<string, string> responseExtraData)
        {
            
            // 네이트의 경우 SK컴즈가 Cyworld를 인수하게 되면서 Cyworld와 Nate를 따로 운영하다가 나중에 
            // 두 사이트를 합치는 일이 벌어집니다. 그 역사가 이 OAuth에 담겨 있습니다. 
            
            // 네이트는 한 가입자의 로그인 방식을 NC, NO, CO로 나눕니다. 
            // 각각 통합, Nate Only, Cyworld Only를 의미합니다. 
            // 각각의 서비스에서 사용자를 식별하는 값을 NK(Nate Key), CK(Cyworld Key)로 나눕니다. 
            
            // 따라서 [방식]_[식별값]을 사용자의 아이디 식별값으로 사용합니다. 
            //CO의 경우에만 CO 값을 사용하며 기본값은 NK로 합니다. 
            // 자세한 내용은 http://devsquare.nate.com/openApi/nateAuthAPIDevGuide 참조

            string userId = "";
            string serviceType = responseExtraData["SSO"];
            
            if (serviceType.Equals("CO"))
            {
                userId = responseExtraData["CK"];
            }
            else
            {
                userId = responseExtraData["NK"];
            }

            return serviceType + "_" + userId;
        }

        public override string ImagePath
        {
            get { return imagePath; }
        }

        private string imagePath;
    }
}